#include <iostream>
using namespace std;
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define FILE_NAME "log.txt"

int main()
{
    //3：实现重定向，将标准输出流重定向到文件中
    //3.1：将标准输入流重定向到文件中
    umask(0);
    //close(1);
    // int fd = open(FILE_NAME, O_WRONLY|O_CREAT|O_TRUNC,0666);
    // if(fd < 0){
    //     perror("open");
    //     return 1;
    // }
    // dup2(fd,1);

    // cout<<"fd:"<<fd<<endl;

    // int cnt = 5;
    // char buffer[64];
    // while (cnt)
    // {
    //     snprintf(buffer,sizeof(buffer),"hello linux:%d\n",cnt--);
    //     write(fd,buffer,strlen(buffer));
    // }

    // close(fd);
    
    //实现从0中读取数据到文件中
    int fd2 = open(FILE_NAME,O_RDONLY);

    dup2(fd2,0);
    char buffer[64];
    int n = read(fd2,buffer,sizeof(buffer)-1);
    if(n > 0){
        buffer[n] = 0;

    }

    close(fd2);






    // // 2：系统接口
    // umask(0);
    // close(0);//关闭了标准输入流的文件描述符

    // int fd = open(FILE_NAME, O_RDONLY); // 只读
    // if (fd < 0)
    // {
    //     perror("open");
    //     return 1;
    // }
    // cout<<"fd:"<<fd<<endl;//这里会自动去补全0的文件描述符


    // char buffer[1024];
    // ssize_t n = read(fd, buffer, sizeof(buffer) - 1);
    // if (n > 0)
    // {
    //     buffer[n] = 0;
    //     cout << buffer << endl;
    // }



    // int fd = open(FILE_NAME,O_WRONLY|O_CREAT|O_APPEND,0666);
    // if(fd < 0){
    //     perror("open");
    //     return 1;
    // }
    // cout<<"fd:"<<fd<<endl;

    // char buffer[64];
    // int cnt =5;
    // while(cnt){
    //     sprintf(buffer,"%s:%d\n","hello zq",cnt--);
    //     write(fd,buffer,strlen(buffer));
    // }

    // close(fd);

    // 1:c的文件接口复习
    //  FILE* fp = fopen(FILE_NAME,"w");//以只写的方式打开
    //  if(fp == nullptr){
    //      perror("fopen");
    //      return 1;
    //  }

    // int cnt = 5;
    // while(cnt){
    //     fprintf(fp,"%s,%d\n","hello linux",cnt--);
    // }

    // FILE* fp2 = fopen(FILE_NAME,"r");//以只写的方式打开
    // //把写入的数据读出来
    // char buffer[64];
    // while(fgets(buffer,sizeof(buffer)-1,fp2) != nullptr){
    //     buffer[strlen(buffer)-1] = 0;
    //     puts(buffer);//先读到buffer缓冲区中，再输出到显示器
    // }

    // fclose(fp2);

    return 0;
}